"""
Google Compute Engine API
"""
module _compute

export compute

using ..api
using ...root

"""
Google Compute Engine API root.
"""
compute = APIRoot(
    "$API_ROOT/compute/v1/projects/{project}",
    Dict(
        "cloud-platform" => "Full access to all resources and services in the specified Cloud Platform project.",
        "compute" => "Read-write access to Google Compute Engine methods.",
        "compute.readonly" => "Read-only access to Google Compute Engine methods.",
    );
    Address=APIResource("regions/{region}/addresses";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/addresses", "Retrieves an aggregated list of addresses."),
        delete=APIMethod(:DELETE, "{address}", "Deletes the specified address resource."),
        get=APIMethod(:GET, "{address}", "Returns the specified address resource."),
        insert=APIMethod(:POST, "", "Creates an address resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of addresses contained within the specified region."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    Autoscaler=APIResource("zones/{zone}/autoscalers";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/autoscalers", "Retrieves an aggregated list of autoscalers."),
        delete=APIMethod(:DELETE, "{autoscaler}", "Deletes the specified autoscaler."),
        get=APIMethod(:GET, "{autoscaler}", "Returns the specified autoscaler resource. Get a list of available autoscalers by making a list() request."),
        insert=APIMethod(:POST, "", "Creates an autoscaler in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of autoscalers contained within the specified zone."; transform=(x, t) -> map(t, get(x, :items, []))),
        patch=APIMethod(:PATCH, "", "Updates an autoscaler in the specified project using the data included in the request. This method supports patch semantics. Required query parameters: autoscaler"),
        update=APIMethod(:PUT, "", "Updates an autoscaler in the specified project using the data included in the request."),
    ),
    BackendService=APIResource("global/backendServices";
        delete=APIMethod(:DELETE, "{backendService}", "Deletes the specified BackendService resource."),
        get=APIMethod(:GET, "{backendService}", "Returns the specified BackendService resource. Get a list of available backend services by making a list() request."),
        getHealth=APIMethod(:POST, "{backendService}/getHealth", "Gets the most recent health check results for this BackendService."),
        insert=APIMethod(:POST, "", "Creates a BackendService resource in the specified project using the data included in the request. There are several restrictions and guidelines to keep in mind when creating a backend service. Read Restrictions and Guidelines for more information."),
        list=APIMethod(:GET, "", "Retrieves the list of BackendService resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        patch=APIMethod(:PATCH, "{backendService}", "Updates the specified BackendService resource with the data included in the request. There are several restrictions and guidelines to keep in mind when updating a backend service. Read Restrictions and Guidelines for more information. This method supports patch semantics."),
        update=APIMethod(:PUT, "{backendService}", "Updates the specified BackendService resource with the data included in the request. There are several restrictions and guidelines to keep in mind when updating a backend service. Read Restrictions and Guidelines for more information."),
    ),
    DiskType=APIResource("zones/{zone}/diskTypes";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/diskTypes", "Retrieves an aggregated list of disk types."),
        get=APIMethod(:GET, "{diskType}", "Returns the specified disk type. Get a list of available disk types by making a list() request."),
        list=APIMethod(:GET, "", "Retrieves a list of disk types available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    Disk=APIResource("zones/{zone}/disks";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/disks", "Retrieves an aggregated list of persistent disks."),
        createSnapshot=APIMethod(:POST, "{disk}/createSnapshot", "Creates a snapshot of a specified persistent disk."),
        delete=APIMethod(:DELETE, "{disk}", "Deletes the specified persistent disk. Deleting a disk removes its data permanently and is irreversible. However, deleting a disk does not delete any snapshots previously made from the disk. You must separately delete snapshots."),
        get=APIMethod(:GET, "{disk}", "Returns a specified persistent disk. Get a list of available persistent disks by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a persistent disk in the specified project using the data in the request. You can create a disk with a sourceImage, a sourceSnapshot, or create an empty 500 GB data disk by omitting all properties. You can also create a disk that is larger than the default size by specifying the sizeGb property."),
        list=APIMethod(:GET, "", "Retrieves a list of persistent disks contained within the specified zone."; transform=(x, t) -> map(t, get(x, :items, []))),
        resize=APIMethod(:POST, "{disk}/resize", "Resizes the specified persistent disk."),
    ),
    Firewall=APIResource("global/firewalls";
        delete=APIMethod(:DELETE, "{firewall}", "Deletes the specified firewall."),
        get=APIMethod(:GET, "{firewall}", "Returns the specified firewall."),
        insert=APIMethod(:POST, "", "Creates a firewall rule in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of firewall rules available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        patch=APIMethod(:PATCH, "{firewall}", "Updates the specified firewall rule with the data included in the request. This method supports patch semantics."),
        update=APIMethod(:PUT, "{firewall}", "Updates the specified firewall rule with the data included in the request."),
    ),
    ForwardingRule=APIResource("regions/{region}/forwardingRules";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/forwardingRules", "Retrieves an aggregated list of forwarding rules."),
        delete=APIMethod(:DELETE, "{forwardingRule}", "Deletes the specified ForwardingRule resource."),
        get=APIMethod(:GET, "{forwardingRule}", "Returns the specified ForwardingRule resource."),
        insert=APIMethod(:POST, "", "Creates a ForwardingRule resource in the specified project and region using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of ForwardingRule resources available to the specified project and region."; transform=(x, t) -> map(t, get(x, :items, []))),
        setTarget=APIMethod(:POST, "{forwardingRule}/setTarget", "Changes target URL for forwarding rule. The new target should be of the same type as the old target."),
    ),
    GlobalAddress=APIResource("global/addresses";
        delete=APIMethod(:DELETE, "{address}", "Deletes the specified address resource."),
        get=APIMethod(:GET, "{address}", "Returns the specified address resource. Get a list of available addresses by making a list() request."),
        insert=APIMethod(:POST, "", "Creates an address resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of global addresses."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    GlobalForwardingRule=APIResource("global/forwardingRules";
        delete=APIMethod(:DELETE, "{forwardingRule}", "Deletes the specified ForwardingRule resource."),
        get=APIMethod(:GET, "{forwardingRule}", "Returns the specified ForwardingRule resource. Get a list of available forwarding rules by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a ForwardingRule resource in the specified project and region using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of ForwardingRule resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        setTarget=APIMethod(:POST, "{forwardingRule}/setTarget", "Changes target URL for forwarding rule. The new target should be of the same type as the old target."),
    ),
    GlobalOperation=APIResource("global/operations";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/operations", "Retrieves an aggregated list of all operations."),
        delete=APIMethod(:DELETE, "{operation}", "Deletes the specified Operations resource."),
        get=APIMethod(:GET, "{operation}", "Retrieves the specified Operations resource. Get a list of operations by making a list() request."),
        list=APIMethod(:GET, "", "Retrieves a list of Operation resources contained within the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    HealthCheck=APIResource("global/healthChecks";
        delete=APIMethod(:DELETE, "{healthCheck}", "Deletes the specified HealthCheck resource."),
        get=APIMethod(:GET, "{healthCheck}", "Returns the specified HealthCheck resource. Get a list of available health checks by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a HealthCheck resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of HealthCheck resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        patch=APIMethod(:PATCH, "{healthCheck}", "Updates a HealthCheck resource in the specified project using the data included in the request. This method supports patch semantics."),
        update=APIMethod(:PUT, "{healthCheck}", "Updates a HealthCheck resource in the specified project using the data included in the request."),
    ),
    HttpHealthCheck=APIResource("global/httpHealthChecks";
        delete=APIMethod(:DELETE, "{httpHealthCheck}", "Deletes the specified HttpHealthCheck resource."),
        get=APIMethod(:GET, "{httpHealthCheck}", "Returns the specified HttpHealthCheck resource. Get a list of available HTTP health checks by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a HttpHealthCheck resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of HttpHealthCheck resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        patch=APIMethod(:PATCH, "{httpHealthCheck}", "Updates a HttpHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics."),
        update=APIMethod(:PUT, "{httpHealthCheck}", "Updates a HttpHealthCheck resource in the specified project using the data included in the request."),
    ),
    HttpsHealthCheck=APIResource("global/httpsHealthChecks";
        delete=APIMethod(:DELETE, "{httpsHealthCheck}", "Deletes the specified HttpsHealthCheck resource."),
        get=APIMethod(:GET, "{httpsHealthCheck}", "Returns the specified HttpsHealthCheck resource. Get a list of available HTTPS health checks by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a HttpsHealthCheck resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of HttpsHealthCheck resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        patch=APIMethod(:PATCH, "{httpsHealthCheck}", "Updates a HttpsHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics."),
        update=APIMethod(:PUT, "{httpsHealthCheck}", "Updates a HttpsHealthCheck resource in the specified project using the data included in the request."),
    ),
    Image=APIResource("global/images";
        delete=APIMethod(:DELETE, "{image}", "Deletes the specified image."),
        deprecate=APIMethod(:POST, "{image}/deprecate", "Sets the deprecation status of an image. If an empty request body is given, clears the deprecation status instead."),
        get=APIMethod(:GET, "{image}", "Returns the specified image. Get a list of available images by making a list() request."),
        getFromFamily=APIMethod(:GET, "family/{family}", "Returns the latest image that is part of an image family and is not deprecated."),
        insert=APIMethod(:POST, "", "Creates an image in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of private images available to the specified project. Private images are images you create that belong to your project. This method does not get any images that belong to other projects, including publicly-available images, like Debian 8. If you want to get a list of publicly-available images, use this method to make a request to the respective image project, such as debian-cloud or windows-cloud."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    InstanceGroupManager=APIResource("zones/{zone}/instanceGroupManagers";
        abandonInstances=APIMethod(:POST, "{instanceGroupManager}/abandonInstances", "Schedules a group action to remove the specified instances from the managed instance group. Abandoning an instance does not delete the instance, but it does remove the instance from any target pools that are applied by the managed instance group. This method reduces the targetSize of the managed instance group by the number of instances that you abandon. This operation is marked as DONE when the action is scheduled even if the instances have not yet been removed from the group. You must separately verify the status of the abandoning action with the listmanagedinstances method."),
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/instanceGroupManagers", "Retrieves the list of managed instance groups and groups them by zone."),
        delete=APIMethod(:DELETE, "instanceGroupManager", "Deletes the specified managed instance group and all of the instances in that group. Note that the instance group must not belong to a backend service. Read Deleting an instance group for more information."),
        deleteInstances=APIMethod(:POST, "{instanceGroupManager}/deleteInstances", "Schedules a group action to delete the specified instances in the managed instance group. The instances are also removed from any target pools of which they were a member. This method reduces the targetSize of the managed instance group by the number of instances that you delete. This operation is marked as DONE when the action is scheduled even if the instances are still being deleted. You must separately verify the status of the deleting action with the listmanagedinstances method."),
        get=APIMethod(:GET, "{instanceGroupManager}", "Returns all of the details about the specified managed instance group. Get a list of available managed instance groups by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a managed instance group using the information that you specify in the request. After the group is created, it schedules an action to create instances in the group using the specified instance template. This operation is marked as DONE when the group is created even if the instances in the group have not yet been created. You must separately verify the status of the individual instances with the listmanagedinstances method."),
        list=APIMethod(:GET, "", "Retrieves a list of managed instance groups that are contained within the specified project and zone."; transform=(x, t) -> map(t, get(x, :items, []))),
        listManagedInstances=APIMethod(:POST, "{instanceGroupManager}/listManagedInstances", "Lists all of the instances in the managed instance group. Each instance in the list has a currentAction, which indicates the action that the managed instance group is performing on the instance. For example, if the group is still creating an instance, the currentAction is CREATING. If a previous action failed, the list displays the errors for that failed action."),
        recreateInstances=APIMethod(:POST, "{instanceGroupManager}/recreateInstances", "Schedules a group action to recreate the specified instances in the managed instance group. The instances are deleted and recreated using the current instance template for the managed instance group. This operation is marked as DONE when the action is scheduled even if the instances have not yet been recreated. You must separately verify the status of the recreating action with the listmanagedinstances method."),
        resize=APIMethod(:POST, "{instanceGroupManager}/resize", "Resizes the managed instance group. If you increase the size, the group creates new instances using the current instance template. If you decrease the size, the group deletes instances. The resize operation is marked DONE when the resize actions are scheduled even if the group has not yet added or deleted any instances. You must separately verify the status of the creating or deleting actions with the listmanagedinstances method. Required query parameters: size"),
        setInstanceTemplate=APIMethod(:POST, "{instanceGroupManager}/setInstanceTemplate", "Specifies the instance template to use when creating new instances in this group. The templates for existing instances in the group do not change unless you recreate them."),
        setTargetPools=APIMethod(:POST, "{instanceGroupManager}/setTargetPools", "Modifies the target pools to which all instances in this managed instance group are assigned. The target pools automatically apply to all of the instances in the managed instance group. This operation is marked DONE when you make the request even if the instances have not yet been added to their target pools. The change might take some time to apply to all of the instances in the group depending on the size of the group."),
    ),
    InstanceGroup=APIResource("zones/{zone}/instanceGroups";
        addInstances=APIMethod(:POST, "{instanceGroup}/addInstances", "Adds a list of instances to the specified instance group. All of the instances in the instance group must be in the same network/subnetwork. Read Adding instances for more information."),
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/instanceGroups", "Retrieves the list of instance groups and sorts them by zone."),
        delete=APIMethod(:DELETE, "{instanceGroup}", "Deletes the specified instance group. The instances in the group are not deleted. Note that instance group must not belong to a backend service. Read Deleting an instance group for more information."),
        get=APIMethod(:GET, "{instanceGroup}", "Returns the specified instance group. Get a list of available instance groups by making a list() request."),
        insert=APIMethod(:POST, "", "Creates an instance group in the specified project using the parameters that are included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of instance groups that are located in the specified project and zone."; transform=(x, t) -> map(t, get(x, :items, []))),
        listInstances=APIMethod(:POST, "{instanceGroup}/listInstances", "Lists the instances in the specified instance group."),
        removeInstances=APIMethod(:POST, "{instanceGroup}/removeInstances", "Removes one or more instances from the specified instance group, but does not delete those instances."),
        setNamedPorts=APIMethod(:POST, "{instanceGroup}/setNamedPorts", "Sets the named ports for the specified instance group."),
    ),
    InstanceTemplate=APIResource("global/instanceTemplates";
        delete=APIMethod(:DELETE, "{instanceTemplate}", "Deletes the specified instance template. If you delete an instance template that is being referenced from another instance group, the instance group will not be able to create or recreate virtual machine instances. Deleting an instance template is permanent and cannot be undone."),
        get=APIMethod(:GET, "{instanceTemplate}", "Returns the specified instance template. Get a list of available instance templates by making a list() request."),
        insert=APIMethod(:POST, "", "Creates an instance template in the specified project using the data that is included in the request. If you are creating a new template to update an existing instance group, your new instance template must use the same network or, if applicable, the same subnetwork as the original template."),
        list=APIMethod(:GET, "", "Retrieves a list of instance templates that are contained within the specified project and zone."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    Instance=APIResource("zones/{zone}/instances";
        addAccessConfig=APIMethod(:POST, "{instance}/addAccessConfig", "Adds an access config to an instance's network interface. Required query parameters: networkInterface"),
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/instances", "Retrieves aggregated list of instances."),
        attachDisk=APIMethod(:POST, "{instance}/attachDisk", "Attaches a Disk resource to an instance."),
        delete=APIMethod(:DELETE, "{instance}", "Deletes the specified Instance resource. For more information, see Stopping or Deleting an Instance."),
        deleteAccessConfig=APIMethod(:POST, "{instance}/deleteAccessConfig", "Deletes an access config from an instance's network interface. Required query parameters: accessConfig, networkInterface"),
        detachDisk=APIMethod(:POST, "{instance}/detachDisk", "Detaches a disk from an instance. Required query parameters: deviceName"),
        get=APIMethod(:GET, "{instance}", "Returns the specified Instance resource. Get a list of available instances by making a list() request."),
        getSerialPortOutput=APIMethod(:GET, "{instance}/serialPort", "Returns the specified instance's serial port output."),
        insert=APIMethod(:POST, "", "Creates an instance resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of instances contained within the specified zone."; transform=(x, t) -> map(t, get(x, :items, []))),
        reset=APIMethod(:POST, "{instance}/reset", "Performs a hard reset on the instance."),
        setDiskAutoDelete=APIMethod(:POST, "{instance}/setDiskAutoDelete", "Sets the auto-delete flag for a disk attached to an instance. Required query parameters: autoDelete, deviceName"),
        setMachineType=APIMethod(:POST, "{instance}/setMachineType", "Changes the machine type for a stopped instance to the machine type specified in the request."),
        setMetadata=APIMethod(:POST, "{instance}/setMetadata", "Sets metadata for the specified instance to the data included in the request."),
        setScheduling=APIMethod(:POST, "{instance}/setScheduling", "Sets an instance's scheduling options."),
        setServiceAccount=APIMethod(:POST, "{instance}/setServiceAccount", "Sets the service account on the instance."),
        setTags=APIMethod(:POST, "{instance}/setTags", "Sets tags for the specified instance to the data included in the request."),
        start=APIMethod(:POST, "{instance}/start", "Starts an instance that was stopped using the using the instances().stop method. For more information, see Restart an instance."),
        startWithEncryptionKey=APIMethod(:POST, "{instance}/startWithEncryptionKey", "Starts an instance that was stopped using the using the instances().stop method. For more information, see Restart an instance."),
        stop=APIMethod(:POST, "{instance}/stop", "Stops a running instance, shutting it down cleanly, and allows you to restart the instance at a later time. Stopped instances do not incur per-minute, virtual machine usage charges while they are stopped, but any resources that the virtual machine is using, such as persistent disks and static IP addresses, will continue to be charged until they are deleted. For more information, see Stopping an instance."),
    ),
    License=APIResource("global/licenses";
        get=APIMethod(:GET, "{license}", "Returns the specified License resource. Get a list of available licenses by making a list() request."),
    ),
    MachineType=APIResource("zones/{zone}/machineTypes";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/machineTypes", "Retrieves an aggregated list of machine types."),
        get=APIMethod(:GET, "{machineType}", "Returns the specified machine type. Get a list of available machine types by making a list() request."),
        list=APIMethod(:GET, "{machineTypes}", "Retrieves a list of machine types available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    Network=APIResource("global/networks";
        delete=APIMethod(:DELETE, "{network}", "Deletes the specified network."),
        get=APIMethod(:GET, "{network}", "Returns the specified network. Get a list of available networks by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a network in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of networks available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    Project=APIResource("";
        get=APIMethod(:GET, "", "Returns the specified Project resource."),
        moveDisk=APIMethod(:POST, "moveDisk", "Moves a persistent disk from one zone to another."),
        moveInstance=APIMethod(:POST, "moveInstance", "Moves an instance and its attached persistent disks from one zone to another."),
        setCommonInstanceMetadata=APIMethod(:POST, "setCommonInstanceMetadata", "Sets metadata common to all instances within the specified project using the data included in the request."),
        setUsageExportBucket=APIMethod(:POST, "setUsageExportBucket", "Enables the usage export feature and sets the usage export bucket where reports are stored. If you provide an empty request body using this method, the usage export feature will be disabled."),
    ),
    RegionOperation=APIResource("regions/{region}/operations";
        delete=APIMethod(:DELETE, "{operation}", "Deletes the specified region-specific Operations resource."),
        get=APIMethod(:GET, "{operation}", "Retrieves the specified region-specific Operations resource."),
        list=APIMethod(:GET, "", "Retrieves a list of Operation resources contained within the specified region."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    Region=APIResource("regions";
        get=APIMethod(:GET, "{region}", "Returns the specified Region resource. Get a list of available regions by making a list() request."),
        list=APIMethod(:GET, "", "Retrieves the list of region resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    Router=APIResource("regions/{region}/routers";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/routers", "Retrieves an aggregated list of routers."),
        delete=APIMethod(:DELETE, "{router}", "Deletes the specified Router resource."),
        get=APIMethod(:GET, "{router}", "Returns the specified Router resource. Get a list of available routers by making a list() request."),
        getRouterStatus=APIMethod(:GET, "{router}/getRouterStatus", "Retrieves runtime information of the specified router."),
        insert=APIMethod(:POST, "", "Creates a Router resource in the specified project and region using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of Router resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        patch=APIMethod(:PATCH, "{router}", "Updates the specified Router resource with the data included in the request. This method supports patch semantics."),
        preview=APIMethod(:POST, "{router}/preview", "Preview fields auto-generated during router create and update operations. Calling this method does NOT create or update the router."),
        update=APIMethod(:PUT, "{router}", "Updates the specified Router resource with the data included in the request."),
    ),
    Route=APIResource("global/routes";
        delete=APIMethod(:DELETE, "{route}", "Deletes the specified Route resource."),
        get=APIMethod(:GET, "{route}", "Returns the specified Route resource. Get a list of available routes by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a Route resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of Route resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    Snapshot=APIResource("global/snapshots";
        delete=APIMethod(:DELETE, "{snapshot}", "Deletes the specified Snapshot resource. Keep in mind that deleting a single snapshot might not necessarily delete all the data on that snapshot. If any data on the snapshot that is marked for deletion is needed for subsequent snapshots, the data will be moved to the next corresponding snapshot."),
        get=APIMethod(:GET, "{snapshot}", "Returns the specified Snapshot resource. Get a list of available snapshots by making a list() request."),
        list=APIMethod(:GET, "", "Retrieves the list of Snapshot resources contained within the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    SslCertificate=APIResource("global/sslCertificates";
        delete=APIMethod(:DELETE, "{sslCertificate}", "Deletes the specified SslCertificate resource."),
        get=APIMethod(:GET, "{sslCertificate}", "Returns the specified SslCertificate resource. Get a list of available SSL certificates by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a SslCertificate resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of SslCertificate resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    Subnetwork=APIResource("regions/{region}/subnetworks";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/subnetworks", "Retrieves an aggregated list of subnetworks."),
        delete=APIMethod(:DELETE, "{subnetwork}", "Deletes the specified subnetwork."),
        get=APIMethod(:GET, "{subnetwork}", "Returns the specified subnetwork. Get a list of available subnetworks list() request."),
        insert=APIMethod(:POST, "", "Creates a subnetwork in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of subnetworks available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    TargetHttpProxy=APIResource("global/targetHttpProxies";
        delete=APIMethod(:DELETE, "{targetHttpProxy}", "Deletes the specified TargetHttpProxy resource."),
        get=APIMethod(:GET, "{targetHttpProxy}", "Returns the specified TargetHttpProxy resource. Get a list of available target HTTP proxies by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a TargetHttpProxy resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of TargetHttpProxy resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        setUrlMap=APIMethod(:POST, "$API_ROOT/compute/v1/projects/{project}/targetHttpProxies/{targetHttpProxy}/setUrlMap", "Changes the URL map for TargetHttpProxy."),
    ),
    TargetHttpsProxy=APIResource("global/targetHttpsProxies";
        delete=APIMethod(:DELETE, "{targetHttpsProxy}", "Deletes the specified TargetHttpsProxy resource."),
        get=APIMethod(:GET, "{targetHttpsProxy}", "Returns the specified TargetHttpsProxy resource. Get a list of available target HTTPS proxies by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a TargetHttpsProxy resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of TargetHttpsProxy resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        setSslCertificates=APIMethod(:POST, "$API_ROOT/compute/v1/projects/{project}/targetHttpsProxies/{targetHttpsProxy}/setSslCertificates", "Replaces SslCertificates for TargetHttpsProxy."),
        setUrlMap=APIMethod(:POST, "$API_ROOT/compute/v1/projects/{project}/targetHttpProxies/{targetHttpsProxy}/setUrlMap", "Changes the URL map for TargetHttpsProxy."),
    ),
    TargetInstance=APIResource("zones/{zone}/targetInstances";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/targetInstances", "Retrieves an aggregated list of target instances."),
        delete=APIMethod(:DELETE, "{targetInstance}", "Deletes the specified TargetInstance resource."),
        get=APIMethod(:GET, "{targetInstance}", "Returns the specified TargetInstance resource. Get a list of available target instances by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a TargetInstance resource in the specified project and zone using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of TargetInstance resources available to the specified project and zone."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    TargetPool=APIResource("regions/{region}/targetPools";
        addHealthCheck=APIMethod(:POST, "{targetPool}/addHealthCheck", "Adds health check URLs to a target pool."),
        addInstance=APIMethod(:POST, "{targetPool}/addInstance", "Adds an instance to a target pool."),
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/targetPools", "Retrieves an aggregated list of target pools."),
        delete=APIMethod(:DELETE, "{targetPool}", "Deletes the specified target pool."),
        get=APIMethod(:GET, "{targetPool}", "Returns the specified target pool. Get a list of available target pools by making a list() request."),
        getHealth=APIMethod(:POST, "{targetPool}/getHealth", "Gets the most recent health check results for each IP for the instance that is referenced by the given target pool."),
        insert=APIMethod(:POST, "", "Creates a target pool in the specified project and region using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of target pools available to the specified project and region."; transform=(x, t) -> map(t, get(x, :items, []))),
        removeHealthCheck=APIMethod(:POST, "{targetPool}/removeHealthCheck", "Removes health check URL from a target pool."),
        removeInstance=APIMethod(:POST, "{targetPool}/removeInstance", "Removes instance URL from a target pool."),
        setBackup=APIMethod(:POST, "{targetPool}/setBackup", "Changes a backup target pool's configurations."),
    ),
    TargetSslProxy=APIResource("global/targetSslProxies";
        delete=APIMethod(:DELETE, "{targetSslProxy}", "Deletes the specified TargetSslProxy resource."),
        get=APIMethod(:GET, "{targetSslProxy}", "Returns the specified TargetSslProxy resource. Get a list of available target SSL proxies by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a TargetSslProxy resource in the specified project using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves the list of TargetSslProxy resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        setBackendService=APIMethod(:POST, "{targetSslProxy}/setBackendService", "Changes the BackendService for TargetSslProxy."),
        setProxyHeader=APIMethod(:POST, "{targetSslProxy}/setProxyHeader", "Changes the ProxyHeaderType for TargetSslProxy."),
        setSslCertificates=APIMethod(:POST, "{targetSslProxy}/setSslCertificates", "Changes SslCertificates for TargetSslProxy."),
    ),
    TargetVpnGateway=APIResource("regions/{region}/targetVpnGateways";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/targetVpnGateways", "Retrieves an aggregated list of target VPN gateways."),
        delete=APIMethod(:DELETE, "{targetVpnGateway}", "Deletes the specified target VPN gateway."),
        get=APIMethod(:GET, "{targetVpnGateway}", "Returns the specified target VPN gateway. Get a list of available target VPN gateways by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a target VPN gateway in the specified project and region using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of target VPN gateways available to the specified project and region."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    UrlMap=APIResource("global/urlMaps";
        delete=APIMethod(:DELETE, "{urlMap}", "Deletes the specified UrlMap resource."),
        get=APIMethod(:GET, "{urlMap}", "Returns the specified UrlMap resource. Get a list of available URL maps by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a UrlMap resource in the specified project using the data included in the request."),
        invalidateCache=APIMethod(:POST, "{urlMap}/invalidateCache", "Initiates a cache invalidation operation, invalidating the specified path, scoped to the specified UrlMap."),
        list=APIMethod(:GET, "", "Retrieves the list of UrlMap resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
        patch=APIMethod(:PATCH, "{urlMap}", "Updates the specified UrlMap resource with the data included in the request. This method supports patch semantics."),
        update=APIMethod(:PUT, "{urlMap}", "Updates the specified UrlMap resource with the data included in the request."),
        validate=APIMethod(:POST, "{urlMap}/validate", "Runs static validation for the UrlMap. In particular, the tests of the provided UrlMap will be run. Calling this method does NOT create the UrlMap."),
    ),
    VpnTunnel=APIResource("regions/{region}/vpnTunnels";
        aggregatedList=APIMethod(:GET, "$API_ROOT/compute/v1/projects/{project}/aggregated/vpnTunnels", "Retrieves an aggregated list of VPN tunnels."),
        delete=APIMethod(:DELETE, "{vpnTunnel}", "Deletes the specified VpnTunnel resource."),
        get=APIMethod(:GET, "{vpnTunnel}", "Returns the specified VpnTunnel resource. Get a list of available VPN tunnels by making a list() request."),
        insert=APIMethod(:POST, "", "Creates a VpnTunnel resource in the specified project and region using the data included in the request."),
        list=APIMethod(:GET, "", "Retrieves a list of VpnTunnel resources contained in the specified project and region."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    ZoneOperation=APIResource("zones/{zone}/operations";
        delete=APIMethod(:DELETE, "{operation}", "Deletes the specified zone-specific Operations resource."),
        get=APIMethod(:GET, "{operation}", "Retrieves the specified zone-specific Operations resource."),
        list=APIMethod(:GET, "", "Retrieves a list of Operation resources contained within the specified zone."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
    Zone=APIResource("zones";
        get=APIMethod(:GET, "{zone}", "Returns the specified Zone resource. Get a list of available zones by making a list() request."),
        list=APIMethod(:GET, "", "Retrieves the list of Zone resources available to the specified project."; transform=(x, t) -> map(t, get(x, :items, []))),
    ),
)

end
